package view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

import controller.SistemaTelefonia;

public class CheckUsuario extends javax.swing.JFrame {

	private static final long serialVersionUID = 1L;
	private JLabel jLabel;

	private JTextField dni = new JTextField();

	private String[] labels = { "DNI" };
	private JTextField[] textFields = { dni };

	private JButton alta;
	private SistemaTelefonia sistema;

	public CheckUsuario() {
	}

	public CheckUsuario(SistemaTelefonia s) {
		super();
		initGUI();
		sistema = s;
	}

	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			generateInputs();
			{
				alta = new JButton();
				getContentPane().add(alta);
				alta.setText("Ingrese DNI del Usuario");
				alta.setBounds(10, 100, 200, 28);
				alta.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						try {
							String usuarioDni = dni.getText();
							UsuarioView usuario = sistema.buscarUsuario(usuarioDni);
							boolean altaAdicional = false;

							if (usuario == null) {
								if(JOptionPane.showConfirmDialog(
										null,
										"El usuario no existente. Debe ingresar sus datos para poder continuar",
										"Confirmacion", JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION){
					
									AltaUsuario altaUsuario = new AltaUsuario(sistema, usuarioDni);
									altaUsuario.setVisible(true);
									
								}
							} else if (getCantLineasUsuario(usuario.getId()) > 0 &&  getCantLineasAdicUsuario(usuario.getId()) < 5) {
								if (JOptionPane
										.showConfirmDialog(
												null,
												"El usuario ya posee una linea. Desea crear una linea adicional?",
												"Confirmacion",
												JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {

									AltaLineaAdicional altaLineaAdicional = new AltaLineaAdicional(sistema, usuarioDni);
									altaLineaAdicional.setVisible(true);

								}
							} else {

								AltaLinea altaLinea = new AltaLinea(sistema, usuarioDni);
								altaLinea.setVisible(true);
							}

							setVisible(false);

						} catch (Exception e) {
							JOptionPane.showMessageDialog(getContentPane(),
									e.getMessage());
							clearInputs();
						}
					}
				});
			}
			pack();
			setTitle("Alta de linea");
			setSize(400, 200);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private int getCantLineasUsuario(int usuarioId) {
		Vector<LineaView> lineas = sistema.getLineasView();
		int cantLineas = 0;

		for (LineaView l : lineas) {
			if (l.getUsuarioId() == usuarioId)
				cantLineas++;
		}

		return cantLineas;
	}
	
	private int getCantLineasAdicUsuario(int usuarioId) {
		Vector<LineaView> lineas = sistema.getLineasView();
		int cantLineas = 0;

		for (LineaView l : lineas) {
			if (l.getUsuarioId() == usuarioId && l.getTipoPlan().equals("Adicional"))
				cantLineas++;
		}

		return cantLineas;
	}

	private void clearInputs() {
		for (JTextField textField : textFields) {
			textField.setText("");
		}
	}

	private void generateInputs() {
		int y = 42;

		for (String label : labels) {
			generateLabel(label, 21, y);
			y += 50;
		}

		y = 42;
		for (JTextField textField : textFields) {
			generateInput(textField, 129, y);
			y += 50;
		}
	}

	private void generateInput(JTextField textField, int x, int y) {
		// textField = new JTextField();
		getContentPane().add(textField);
		textField.setBounds(x, y, 210, 28);
	}

	private void generateLabel(String label, int x, int y) {
		{
			jLabel = new JLabel();
			jLabel.setText(label);
			jLabel.setBounds(x, y, 103, 28);
			getContentPane().add(jLabel);
		}

	}

}